package com.heihei.util.str2byte;

import com.heihei.util.FileUtilF;

import java.io.*;
import java.util.Arrays;
import java.util.List;

/**
 *  txt 转字节码  测试
 *
 * @author duanhf
 * 2022年01月20日 11:22:27
 */
public class TaskStart {
    public static void main(String[] args) {
        //开始任务
        try {
            start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 开始任务
     *
     * @author duanhf
     * 2021年11月09日 11:03:42
     */
    private static void start() throws IOException {
//        File srcDir = new File("D:\\安装包\\24_压缩文件测试\\files");
//        File desDir = new File("D:\\安装包\\24_压缩文件测试\\files_转换后_02");
//        transTxt2ByteArrBatch(srcDir, desDir);

        //分类并且去除NaN，存储
//        File srcDir = new File("D:\\安装包\\24_压缩文件测试\\files");
//        File desDir = new File("D:\\安装包\\24_压缩文件测试\\分类转换-211111-源");
//        classifyAndRemNan(srcDir, desDir);

        //将txt批量转double 转字节码 存储
        File srcDir = new File("D:\\安装包\\24_压缩文件测试\\分类转换-211111-源");
        File desDir = new File("D:\\安装包\\24_压缩文件测试\\分类转换-211111-转换字节码后");
        transTxt2ByteArrBatch(srcDir, desDir);
    }


    /**
     * 分类并且去除NaN，存储
     *
     * @author duanhf
     * 2021年11月11日 10:03:43
     */
    public static void classifyAndRemNan(File srcDir, File desDir) throws IOException {
        List<String> factorNameList = Arrays.asList("DQ_ADJCLOSE", "DQ_ADJOPEN", "DQ_AMOUNT", "DQ_CLOSE", "DQ_PCTCHANGE",
                "DQ_PRECLOSE", "FLOAT_A_SHR_T", "S_VAL_MV", "TOT_SHR_TODAY");
        FileUtilF.handleFiles(srcDir, file -> {
            BufferedReader br = null;
            BufferedWriter bw = null;
            if(!factorNameList.contains(file.getName())) {
                System.out.println(file.getName());
                return;
            }
            File currDesDir = new File(desDir, file.getName());
            String scrFileAbsPath = file.getAbsolutePath();
            String relativePath = scrFileAbsPath.substring(srcDir.getAbsolutePath().length());
            File currDesFile = new File(currDesDir, relativePath);
            //保证父级文件夹存在
            File parentFile = currDesFile.getParentFile();
            if(!parentFile.exists()) {
                parentFile.mkdirs();
            }
            try {
                br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
                bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(currDesFile), "UTF-8"));
                String s = null;
                while((s = br.readLine())!=null){
                    if("NaN".equals(s)) {
                        continue;
                    }
                    bw.write(s);
                    bw.newLine();
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    bw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        });
    }

    /**
     * 批量转double然后转字节码
     *
     * @author duanhf
     * 2021年11月09日 14:33:11
     */
    public static void transTxt2ByteArrBatch(File srcDir, File desDir) throws IOException {
        //递归遍历srcDir
        FileUtilF.handleFiles(srcDir, file -> {
            String currAbsPath = file.getAbsolutePath();
            String subStr = currAbsPath.substring(srcDir.getAbsolutePath().length());
            File desFile = new File(desDir, subStr);
            File parentDir = desFile.getParentFile();
            if(!parentDir.exists()) {
                parentDir.mkdirs();
            }
            //拷贝文件
            StrDouble2ByteFileUtil.transTxt2ByteArr(file, desFile);
//            System.out.println("拷贝完成：" + file.getAbsolutePath());
        });
    }
}
